//f[i]表示以s[i]结尾的字符串的函数总和
//first[c]是串中上一次出现c的位置(未出现则-1)
//second[c]是串中上上一次出现c的位置(未出现则为-1)
//f[i]=f[i-1]+(i-first[s[i]])-(first[s[i]]-second[s[i]])
import java.util.Arrays;

public class Solution828 {
    public int uniqueLetterString(String s) {
        if (s.length()==0){
            return 0;
        }
        int mod=1000000007;
        long[] f=new long[s.length()];
        int[] first=new int[26];
        int[] second=new int[26];
        Arrays.fill(first,-1);
        Arrays.fill(second,-1);
        f[0]=1;
        first[s.charAt(0)-'A']=0;
        for (int i=1;i<s.length();i++){
            f[i]=f[i-1];
            int t=s.charAt(i)-'A';
            int m=i-first[t];
            int n=first[t]-second[t];
            f[i]=(((f[i]+m)%mod-n)%mod+mod)%mod;
            second[t]=first[t];
            first[t]=i;
        }
        long ans=0;
        for (long l : f) {
            ans=(ans+l)%mod;
        }
        return (int)ans;
    }

    public static void main(String[] args) {
        System.out.println(new Solution828().uniqueLetterString("LEETCODE"));
    }
}
